
//js 异步 是分为两种的：宏任务  微任务；
//主要是通过宏任务 微任务；把异步 同步的执行规则搞明白：
//同步的执行规则；从上往下：
//异步：
//1，先执行同步，之后再执行异步；
//2, 异步之间的关系；
//举例：同步的代码比较多，需要执行10秒钟； 在代码的第一行 第二行分别启动2个定时器；1秒  2秒；

let timer1 = setTimeout(() => {
    console.log(1);
}, 1000);
let timer2 = setTimeout(() => {
    console.log(2);
}, 2000);
//很多的同步代码；需要执行10秒钟；
//.........
console.log(3);
//3 1 2 
// 当可以执行异步的时候，但是同步代码还没有执行完，这个时候 异步代码需要等待；
// 队列； 先进先出；
//异步再队列中 排队 等待执行；
//宏任务队列 微任务队列；
//执行的规则是不一样的；
//当同步代码执行完之后，
//第一步：去执行微任务队列中的所有 微任务；执行所有的微任务；
//第二步：去执行宏任务队列中的 排在第一位的宏伟人（一个）；（执行宏任务的时候，有可能会产生新的微任务）
//第三步：再去看看微任务的队列有没有微任务，有的话，全部执行。
//第四部：宏任务

//同步=》微任务（执行所有的）=》宏任务（执行一个）=》微任务（所有的）=》宏任务（一个）;  一直到宏任务和微任务都被清空；结束
// 定时器=》宏任务
// promise ayncs 微任务；